class Solution {
public:
    int distinctSubseqII(string s) {
        vector<long int> line(26);//初始化一个长度为 26 的长整型数组 line，用于存储每个字母对应的以该字母结尾的不同子序列的数量
        int n=s.size();
        for(int i=0;i<n;i++){
            long int sum=0;
            for(int j=0;j<26;j++){
                sum=(sum+line[j])%1000000007;
                //计算之前有多少个不同子序列
            }
            line[s[i]-'a']=sum+1;
            //当前字符可以与之前的任何子序列组合形成新的不同的子序列，自身也可以作为一个子序列(所以+1)
        }
        long int result=0;

//***************
//看实例1和实例2的区别!!!!!!!!!!!!!
//aba 没有2个a,只有"a", "b", "ab", "aa", "ba", "aba"
//abc:"a", "b", "c", "ab", "ac", "bc", 以及 "abc"。

        for(int i=0;i<26;i++){
            result=(result+line[i])%1000000007;
            //计算字符串S中所有不同非空子序列的总数
        }
        return result;
    }
};